/*==========================================================================*/
/*            Copyright (C) 2000 Texas Instruments, Incorporated            */
/*                          All Rights Reserved.                            */
/*==========================================================================*/
/*
 *  ======== ih263enc.h ========
 *  IH263ENC Interface Header
 */
#ifndef IH263ENC_
#define IH263ENC_

#include <std.h>
#include <ialg.h>     
#include "ih263.h"


/*
 *  ======== IH263ENC_Handle ========
 *  This handle is used to reference all H263ENC instance objects
 */
typedef struct IH263ENC_Obj *IH263ENC_Handle;


/*
 *  ======== IH263ENC_Obj ========
 *  This structure must be the first field of all H263ENC instance objects
 */
typedef struct IH263ENC_Obj
{
    struct IH263ENC_Fxns *fxns;

} IH263ENC_Obj;

/*
 *  ======== IH263ENC_Params ========
 *  This structure defines the creation parameters for all H263ENC objects
 */
typedef struct IH263ENC_Params
{
    int            size; /* must be first field of all params structures   */
    unsigned short bitRate;   /* target bitrate (kbps)                     */
    unsigned char  frameRate; /* target frame rate                         */
    unsigned char  intraRate; /* I-frame is coded every intraRate frame(s) */
    unsigned char  qi;        /* Q value for I-frames                      */
    unsigned char  minQ;      /* minimum Q value allowed                   */
    unsigned char  maxQ;      /* maximum Q value allowed                   */
    H263_SRCFMT    srcFormat; /* source format of encoded sequence            */
    unsigned char  nMB2proc;  /* number of macro blocks to process         */

} IH263ENC_Params;

/*
 *  ======== IH263ENC_PARAMS ========
 *  Default parameter values for H263ENC instance objects
 */
extern IH263ENC_Params IH263ENC_PARAMS;

/*
 *  ======== IH263ENC_Fxns ========
 *  This structure defines all of the operations on H263ENC objects
 */
typedef struct IH263ENC_Fxns
{
    IALG_Fxns ialg; /* IH263ENC extends IALG */
              
    void      (*encode)(IH263ENC_Handle  handle,
                        unsigned char   *in[3],
                        unsigned int    *out);

} IH263ENC_Fxns;

/*
 *  ======== IH263DEC_Status ========
 *  Status structure defines the parameters that can be changed or read
 *  during real-time operation of the alogrithm.
 */
typedef struct IH263ENC_Status
{
    int            size;      /* must be first field of all status structures */
    int            frame;     /* number of frames decoded                     */
    int            width;     /* width of decoded  frame                      */
    int            height;    /* height of decoded frame                      */
    H263_SRCFMT    srcFormat; /* source format of encoded sequence            */
    H263_PTYPE     picType;   /* encoded picture type                         */
    unsigned char *y;         /* pointer to Y                                 */
    unsigned char *u;         /* pointer to U/Cb                              */
    unsigned char *v;         /* pointer to V/Cr                              */
    int            nBits;     /* number of bits consumed by current frame     */
    int            nWords;

} IH263ENC_Status;

/*
 *  ======== IH263ENC_Cmd ========
 *  The Cmd enumeration defines the control commands for the H263ENC
 *  control method.
 */
typedef enum IH263ENC_Cmd
{
    IH263ENC_GETSTATUS,
    IH263ENC_SETSTATUS,
    IH263ENC_CLRSTATUS,
    IH263ENC_SETPARAMS

} IH263ENC_Cmd;

#endif	/* IH263ENC_ */

/*==========================================================================*/
/*            Copyright (C) 2000 Texas Instruments, Incorporated            */
/*                          All Rights Reserved.                            */
/*==========================================================================*/
